=============================================================================== 外部プログラムについて =============================================================================== 外部プログラムを自分で作成したい場合は、以下の仕様でDLLを作成してください。 ただし、WaveGraphのバージョンアップによって、DLLの仕様は変更される可能性があります。 dllsrc.lzhにサンプルがあります。 ■エクスポートする関数 LPCSTR WINAPI _export WGInfo(void) 外部プログラム実行用のダイアログボックスに表示される文字列を指定する関数です。 戻り値 文字列を指すポインタ int WINAPI _export ExecuteFunc(WGDATA *wgData) 外部プログラムの処理を行う関数です。 戻り値 画面を更新するウインドウの番号(1 : Window1 2 : Window2 3 : 両方) ■メッセージ #define WM_WG_BACK 32701 データを変更する前に、元のデータをバックアップするようにWaveGraphに指示します。 WaveGraphのユーザーが、[編集]メニューの[元に戻す]を実行すると、バックアップした データが復元されます。 パラメータ wgBack = (WGBACK *)lParam 戻り値 なし #define WM_WG_SETDATA 32702 ExecuteFuncのパラメータ wgData の内容を変更したとき、WaveGraphに変更を知らせます。 ExecuteFuncが終了する前にSendしなくてはなりません。 変更が無い場合は、使用しなくてもかまいません。 パラメータ wgData = (WGDATA *)lParam 戻り値 なし ■構造体 typedef struct { struct { LPVOID data; // データを指すポインタ (Waveファイルのdataチャンクと同じ形式。 // 量子化ビット数に応じて、キャストして使用するとよい。) UINT nData; // データの数 UINT nDataPerSec; // サンプリングレート WORD nChannels; // モノラル(1) ステレオ(2) WORD nBits; // 量子化ビット数 (8 or 16) UINT x1,x2; // 選択領域 (0 ≦ x1 ≦ x2 ≦ nData-1) double a; // データの倍率 (演算ウインドウのコンボボックスの数値) WORD currentChannel; // 操作対象のチャンネル (1 or 2) } data[2]; // 0: Window1 1:Window2 short Current; // 操作対象のウインドウの番号 (1 or 2) HWND hwnd; // 親ウインドウのハンドル } WGDATA; typedef struct { short n; // バックアップする対象 (1: Window1 2: Window2 3:All) bool fCh; // true : 全チャンネル保存 false : 現在のチャンネルのみ保存 UINT x1,x2; // 保存する領域 } WGBACK; ■例 int WINAPI _export ExecuteFunc(WGDATA *wgData) { . . . // ダイアログボックス表示 . . if (Okボタンクリック) { . . . . // WaveGraphにデータをバックアップするように指示 WGBACK wgBack; wgBack.n = バックアップする対象 (1: Window1 2: Window2 3:All) wgBack.fCh = true : 全チャンネル保存 false : 現在のチャンネルのみ保存 wgBack.x1 = 保存する領域の先頭の番号 wgBack.x2 = 保存する領域の後尾の番号 SendMessage(wgData->hwnd,WM_WG_BACK,0,(LPARAM)&wgBack); . . . // 何らかの処理を行う . . . // WaveGraphにデータの変更を知らせる for (int i=0;i<=1;i++) { wgData->data[i].data = 新たなデータを指すポインタ wgData->data[i].nData = 新たなデータの数 wgData->data[i].nDataPerSec = 新たなサンプリングレート wgData->data[i].nChannels = 新たなチャンネル数(モノラル(1) or ステレオ(2)) wgData->data[i].nBits = 新たな量子化ビット数 wgData->data[i].x1 = 新たな選択領域の先頭の番号 wgData->data[i].x2 = 新たな選択領域の後尾の番号 // WGDATA構造体の上記以外のメンバーの変更は、知らせる必要はありません。 // Window1とWindow2のフォーマットは、チャンネル数以外は同じでなくてはなりません。 } SendMessage(wgData->hwnd,WM_WG_SETDATA,0,(LPARAM)wgData); . . . } // ExecuteFunc が終了したとき、画面を更新するウインドウを指定 // // r = 1 : Window1更新 // r = 2 : Window2更新 // r = 3 : 全て更新 return r; } LPCSTR WINAPI _export WGInfo() { return "処理の名前"; }